// boolean，表示true/false值
const v_boolean: boolean = true


// number，表示数字值
const v_number: number = 10000


// string，表示字符串值
const v_string: string = 'TypeScript is very delicious'


// array，每个元素类型必须与声明类型一致
const v_array1: string[] = ['a', 'b', 'c']
const v_array2: Array<string> = ['a', 'b', 'c']


// tuple，数组元素个数必须确定，且每个索引位置的类型必须对应
const v_tuple: [string, number, boolean] = ['string', 10000, false]


// enum，从0开始
enum Gender {
    male = 0,
    female = 1
}
// 使用枚举名称.枚举值或直接赋数字值
const v_enum_gender1: Gender = Gender.male
const v_enum_gender2: Gender = 1


// any，它可以表示任何基本类型和复杂类型
let v_any: any = false
v_any = 'I`m a string type now'
v_any = 10000
v_any = { name: 'lzwk' }


// void，表示没有值，常用于方法返回值
const v_onClick: (e: any) => void = (e) => {
    console.log('type of variable `e` is any')
}


// null、undefined，undefined表示没有，null表示空值
const v_null: null = null
const v_undefined = undefined


//never，抛出异常的方法会返回never，表示永远不知道它是什么类型
const throw_an_exception = () => {
    throw new Error('throws an exception will returns a never type')
}
const v_never: never = throw_an_exception()


// object，表示任意的复杂对象类型
const v_object: object = {}